package campeonatofutebol.activity;

import java.util.ArrayList;
import java.util.Arrays;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.Toast;
import campeonatofutebol.bean.RepositorioDeDados;
import campeonatofutebol.bean.Time;
import campeonatofutebol.persistencia.DBAdapter;
import campeonatofutebol.util.CarregadorDeFeeds;
import campeonatofutebol.util.Constantes;
import campeonatofutebol.util.GerenciadorServico;
import campeonatofutebol.util.Servico;

import com.example.campeonatofutebol.R;
import com.facebook.Session;

public class FeedListActivity extends Activity{

        private FeedsListAdapter adapter;
        private DBAdapter dataSource;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                setContentView(R.layout.feed_list_layout);
                dataSource = new DBAdapter(this);
                final ExpandableListView listView = (ExpandableListView) findViewById(R.id.expandableListView1);
                ArrayList<String> itensCampeonatos = new ArrayList<String>();          
                ArrayList<String> nomeTimes = new ArrayList<String>();
                ArrayList<String> itensJogosDaSemana = new ArrayList<String>();
                ArrayList<String> itensNotificacao = new ArrayList<String>();
                final ArrayList<ArrayList<String>> itensDosGrupos =  new ArrayList<ArrayList<String>>();

                itensCampeonatos.add("Notícias");
                itensCampeonatos.add("Classificação");
               
                itensJogosDaSemana.add("Segunda");
                itensJogosDaSemana.add("Terça");
                itensJogosDaSemana.add("Quarta");
                itensJogosDaSemana.add("Quinta");
                itensJogosDaSemana.add("Sexta");
                itensJogosDaSemana.add("Sábado");
                itensJogosDaSemana.add("Domingo");
                itensNotificacao.add("Ativar/Desativar");
                itensNotificacao.add("Configurar periodicidade");
               
                for (Time time : (ArrayList<Time>)RepositorioDeDados.getInstance().getTimes()) {
                        nomeTimes.add(time.getNome());
                }

                itensDosGrupos.add(nomeTimes);
                itensDosGrupos.add(itensCampeonatos);
                itensDosGrupos.add(itensCampeonatos);
                itensDosGrupos.add(new ArrayList<String>(Arrays.asList("Notícias")));
                dataSource.open();
                itensDosGrupos.add((ArrayList<String>)dataSource.getTimesFavoritados());
                RepositorioDeDados.getInstance().getFavoritos().addAll(dataSource.getTimesFavoritados());
                
                dataSource.close();
                itensDosGrupos.add(itensJogosDaSemana);
                itensDosGrupos.add(itensNotificacao);
                
                adapter = new FeedsListAdapter(this, itensDosGrupos);

                listView.setOnChildClickListener(new OnChildClickListener() {
                        @Override
                        public boolean onChildClick(ExpandableListView arg0, View v, int groupPosition, int childPosition, long id) {
                                String group = adapter.getGroupName(groupPosition);
                                String itemSelecionado = ((String) adapter.getChild(groupPosition, childPosition));
                               
                                if(!group.equals("Notificações")) {
                                	Intent i = new Intent(FeedListActivity.this, MessageList.class);
	                                if(group.equals("Times") || group.equals("Favoritos")){
	                                        CarregadorDeFeeds.getInstance().setTimeAtual(itemSelecionado);
	                                } else if(group.equals("Jogos da Semana")){
	                                		Bundle b = new Bundle();
	                                		b.putSerializable("diaDaSemana", itemSelecionado);
	                                		i = new Intent(FeedListActivity.this, JogosList.class);
	                                		i.putExtras(b);
	                                        CarregadorDeFeeds.getInstance().setJogosDaSemanaAtual(itemSelecionado);
	                                } else {
	                                	if(itemSelecionado.equals("Notícias")){
	                                        CarregadorDeFeeds.getInstance().setCampeonatoAtual(group);
	                                	}else{
	                                		CarregadorDeFeeds.getInstance().setClassificacaoAtual(group);
	                                		i = new Intent(FeedListActivity.this, ClassificacaoList.class);
	                                	}
	                                }
	                               
	                                startActivity(i);
                                } else {
                					if(itemSelecionado.equals("Ativar/Desativar")) {
                						ativarDesativarNotificacoes();
                					} else if(itemSelecionado.equals("Configurar periodicidade")) {
                						configPopup();
                					}
                                }
                               
                                return false;
                        }
                });
                listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                    @Override
                    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                        if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
                            int groupPosition = ExpandableListView.getPackedPositionGroup(id);
                            int childPosition = ExpandableListView.getPackedPositionChild(id);
                            
                            return true;
                        }
                        return false;
                    }
                });
                
                listView.setAdapter(adapter);
        }
        
        protected void ativarDesativarNotificacoes() {
        	Intent i = new Intent(this, Servico.class);
        	GerenciadorServico gerenciador = GerenciadorServico.getInstance();
        	if(gerenciador.getAtivo()) {
        		stopService(i);
        		Toast.makeText(getApplicationContext(), "Notificacoes desativadas",
        			    Toast.LENGTH_LONG).show();
        	} else {
        		dataSource.open();
        		i.putExtra("servico", "notificacao");
				i.putStringArrayListExtra("listaFavoritados", (ArrayList<String>) dataSource.getTimesFavoritados());
        		startService(i);
        		dataSource.close();
        		Toast.makeText(getApplicationContext(), "Notificacoes ativadas",
        			    Toast.LENGTH_LONG).show();
        	}
        	gerenciador.setAtivo(!gerenciador.getAtivo());
        }
        
    	protected void configPopup() {
    		final GerenciadorServico gerenciador = GerenciadorServico.getInstance();
    		final FeedListActivity instanceThis = this;
    		AlertDialog.Builder b = new Builder(this);
    	    b.setTitle("Periodicidade");
    	    b.setMessage("Configure o tempo de espera entre cada atualização (em minutos)");
    	    final EditText input = new EditText(this);
    	    input.setText(String.format("%d", gerenciador.getDuracaoPausa()));
    	    b.setView(input);
    	    b.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    	    	public void onClick(DialogInterface dialog, int whichButton) {
    	    		try {
	    	    		gerenciador.setDuracaoPausa(Integer.valueOf((String)input.getText().toString()));
	    	    		Toast.makeText(getApplicationContext(), "Configuracao salva",
	    	    			    Toast.LENGTH_LONG).show();
    	    		} catch (Exception e) {
    	    			Log.w("Erro periodicidade", e.getMessage());
    	    		}
        		}
        	});

        	b.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        		public void onClick(DialogInterface dialog, int whichButton) {}
        	});

    	    b.show();
    	}
       
        @Override
        protected void onDestroy() {
                Session sessaoAtual = Session.getActiveSession();
                if(sessaoAtual!= null && sessaoAtual.isOpened()){
                        Session.getActiveSession().closeAndClearTokenInformation();
                        Log.w("feedList", "sessao limpa");
                }
                super.onDestroy();
                Log.w("feedList", "atividade destruida");
        }
        
        protected void showChatWall(){
        	
        }
}
